#include<stdio.h>
#include<sys/root.h>

int main(void)
{

int ID;
int myx, myy, myz;
int  dimx, dimy, dimz;
int numbproc;
int next, prev, up, low;

//получение значений полей структуры RootProc_t

//идентификатор процессора
ID=GET_ROOT()->ProcRoot->MyProcID;

//коорддината процессора по X, Y и Z
myx=GET_ROOT()->ProcRoot->MyX;
myy=GET_ROOT()->ProcRoot->MyY;
myz=GET_ROOT()->ProcRoot->MyZ;

//размерность сети процессоров по X, Y и Z
dimx=GET_ROOT()->ProcRoot->DimX;
dimy=GET_ROOT()->ProcRoot->DimY;
dimz=GET_ROOT()->ProcRoot->DimZ;

//количество процессоров
numbproc = GET_ROOT()->ProcRoot->nProcs;

next = -1;
prev = -1;
up = -1;
low = -1;

//информация о процессоре,на котором запущена программа
printf ("ID = %d, MyXYZ = {%d, %d, %d}  DimXYZ = {%d, %d, %d}   --   proc = %d\n", ID, myx, myy, myz, dimx, dimy, dimz, numbproc);

//вычисление соседей данного процессора
if (myx<dimx-1)

{	next = myz*dimx*dimy + (myy*dimx) + (myx+1);    }

if (myx > 0)

{	prev = myz*dimx*dimy + (myy*dimx) + (myx-1);   }

if (myy<dimy-1)

{	up = myz*dimx*dimy + ((myy+1)*dimx) + (myx);    }

if (myy>0)

{	low = myz*dimx*dimy + ((myy-1)*dimx) + myx;    }

printf ("ID: %d , next: %d, low: %d, prev: %d, up: %d \n", ID, next, low, prev, up);
return 0;
}

